package org.simple.redis.factory;

import org.simple.redis.property.RedisProperty;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.Objects;

/**
 * @author sisyphus (E-mail:1620657419@qq.com)
 * @version v1.0 创建时间：2017/9/18 16:44
 * JedisPool连接池单例
 */
public class JedisSingletonFactory {

    private static JedisPool jedisPool;//非切片连接池

    private JedisSingletonFactory() {
    }

    public static JedisPool getJedisPool() {
        if (jedisPool == null) {
            synchronized (JedisSingletonFactory.class) {
                if (jedisPool == null) {
                    JedisPoolConfig config = new JedisPoolConfig();
                    //最大空闲连接数, 应用自己评估，不要超过ApsaraDB for Redis每个实例最大的连接数
                    config.setMaxIdle(200);
                    //最大连接数, 应用自己评估，不要超过ApsaraDB for Redis每个实例最大的连接数
                    config.setMaxTotal(4000);
                    //在获取连接的时候检查有效性, 默认false
                    config.setTestOnBorrow(false);
                    config.setTestOnReturn(false);

                    if (Objects.nonNull(RedisProperty.PASSWORD) && RedisProperty.PASSWORD.length() > 0) {
                        jedisPool = new JedisPool(config, RedisProperty.IP, RedisProperty.PORT, 3000, RedisProperty.PASSWORD);
                    } else {
                        jedisPool = new JedisPool(config, RedisProperty.IP, RedisProperty.PORT, 3000);
                    }

                }
            }
        }
        return jedisPool;
    }


}
